package pms.om;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name = "tbl_jahr")

public class Jahr {
	
	@Id
	@GeneratedValue
	@Column(name = "pk_jahr")  
	private int id;
	private String jahr;
	
	//Kardinaliäten	
	
	@ManyToMany(targetEntity = pms.om.Feiertag.class,
			cascade={CascadeType.ALL},
			fetch = FetchType.EAGER)
	@JoinTable(name="tbl_jahrfeiertag",
			joinColumns={@JoinColumn(name="fk_jahr")},
			inverseJoinColumns={@JoinColumn(name="fk_feiertag")})
	private Set<Feiertag> feiertageimdefiniertenjahr;

	@ManyToMany(targetEntity = pms.om.Sperrtag.class,
			cascade={CascadeType.ALL},
			fetch = FetchType.EAGER)
	@JoinTable(name="tbl_jahrsperrtag",
			joinColumns={@JoinColumn(name="fk_jahr")},
			inverseJoinColumns={@JoinColumn(name="fk_sperrtag")})
	private Set<Sperrtag> sperrtageimdefiniertenjahr;
	
    @Override
    public boolean equals(Object o) {
    	return (id == ((Jahr) o).getId());
    }
	
	// Konstruktoren
	public Jahr() {
		this.jahr = "";
	}
	
    public Jahr(String jahr) {
    	this.jahr = jahr;	
    }
    
    // Setter und Getter
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getJahr() {
		return jahr;
	}

	public void setJahr(String jahr) {
		this.jahr = jahr;
	}

	public Set<Feiertag> getFeiertageimdefiniertenjahr() {
		return feiertageimdefiniertenjahr;
	}

	public void setFeiertageimdefiniertenjahr(
			Set<Feiertag> feiertageimdefiniertenjahr) {
		this.feiertageimdefiniertenjahr = feiertageimdefiniertenjahr;
	}

	public Set<Sperrtag> getSperrtageimdefiniertenjahr() {
		return sperrtageimdefiniertenjahr;
	}

	public void setSperrtageimdefiniertenjahr(
			Set<Sperrtag> sperrtageimdefiniertenjahr) {
		this.sperrtageimdefiniertenjahr = sperrtageimdefiniertenjahr;
	}
	
	// loescht aus dem Set einen Feiertag
	public void loescheFeiertag(Feiertag f) {
        Set<Feiertag> neu = new HashSet<Feiertag>();
        for (Feiertag feiertag : this.feiertageimdefiniertenjahr) {
        	if (!feiertag.equals(f)) {
        		neu.add(feiertag);
        	} 
		}
        setFeiertageimdefiniertenjahr(neu);
	}

	// fuegt dem Set einen Feiertag hinzu
	public void fuegeFeiertaghinzu(Feiertag f) {
		this.feiertageimdefiniertenjahr.add(f);
		
	}

	// loescht aus dem Set einen Sperrtag
	public void loescheSperrtag(Sperrtag s) {
        Set<Sperrtag> neu = new HashSet<Sperrtag>();
        for (Sperrtag sperrtag : this.sperrtageimdefiniertenjahr) {
        	if (!sperrtag.equals(s)) {
        		neu.add(sperrtag);
        	} 
		}
        setSperrtageimdefiniertenjahr(neu);
		
	}

	// fuegt dem Set einen sperrtag hinzu
	public void fuegeSperrtaghinzu(Sperrtag s) {
		this.sperrtageimdefiniertenjahr.add(s);		
	}

}
